﻿using ConfExpert.Enums;
using ConfExpert.Forms.Base;
using ConfExpert.Forms.Rapor;
using ConfExpert.Utility;

using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraReports.UI;
using DevExpress.XtraVerticalGrid.Events;
using DevExpress.XtraVerticalGrid.Rows;
using DevTeam;

using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;

namespace ConfExpert.Forms.Depo
{
    public partial class CikisEmirleri : XForm
    {
        BindingSource bsCE;
        BindingSource bsCELines;
        BindingSource bsCELines2;

        public CikisEmirleri()
        {
            InitializeComponent();
        }

        public int CikisEmriId
        {
            get
            {
                if (gvCikisEmri.FocusedRowHandle < 0)
                    return -1;
                else
                    return Convert.ToInt32(gvCikisEmri.GetFocusedRowCellValue("CikisEmriId"));
            }
        }

        private void CikisEmirleri_Load(object sender, EventArgs e)
        {
            //DİKKAT! CikisEmriLines tablosunda KesilecekMiktar=null olanlar, top bölmeden oluşan toplar ve çıkış emrinde olmayıp sonradan eklenen toplardır.

            //3 gridi birbirine bağlama:
            //Sadece ilki init, diğerleri addDetailGrid fonksiyonlarını kullanıyor.
            //Virgülle ayrılmış PK lar destekleniyor.

            
            bsCE = gvCikisEmri.Init("GetCikisEmriFiltered", "AÇIK", 0, 0, 0, 0, 0, string.Empty, 0, 0, 0, new DateTime(2000, 1, 1), 0, new DateTime(2000, 1, 1), string.Empty, false, string.Empty, string.Empty, 0, 0, 0, 0);
            bsCELines = gvCikisEmri.AddDetailGrid(gvCELines, "CikisEmriId");
            bsCELines2 = gvCELines.AddDetailGrid(gvCELines2, "CikisEmriId,ProductId");



            //Grid e expression içeren sütun ekleme ;
            //{FK} geçen yere fonksiyon otomatik olarak ilk FK nın ismini yazıyor.            
            //gvCELines2.SutunEkle("SelectedQty", typeof(int), "Iif(ISNULL(KesilecekMiktar,0)=0, Qty,ISNULL(KesilecekMiktar,0))");
            gvCikisEmri.AddColumn("Qty", typeof(int), "SUM(Child({FK}).Qty)");

            gvCELines2.AddColumn("E", typeof(int), "Iif(ISNULL(stCikisId,2)=2, 1, 0)");
            gvCELines2.AddColumn("F", typeof(int), "Iif(ISNULL(Eklendi,0)=1, 1, 0)");
            gvCELines.AddColumn("Eksik", typeof(int), "SUM(Child({FK}).E)");
            gvCELines.AddColumn("Fazla", typeof(int), "SUM(Child({FK}).F)");
            gvCELines.FormatAsNumber(0, "Eksik", "Fazla");
            gvCELines.Columns["Eksik"].ToolTip = "Çıkılmamış/eksik top adedi";
            gvCELines.Columns["Fazla"].ToolTip = "Çıkış emrinde geçmediği halde deponun çıkışa eklediği top adedi";

            //Devx MakeColumnVisible eklemiş, invisible ını da ben ekledim :)
            gvCikisEmri.MakeColumnInvisible("Seç", "AG");
            gvCELines.MakeColumnInvisible("ProductId", "CikisEmriId", "Hit");
            gvCELines2.MakeColumnInvisible("CikisEmriId", "ProductId", "Scan", "Hit", "E", "F");

            gvCikisEmri.FormatAsNumber(1, "Qty");
            gvCELines.FormatAsNumber(1, "Qty");
            gvCELines2.FormatAsNumber(1, "Qty", "KumasEni");
            gvCikisEmri.FormatAsDateTime("OlusturulmaTarihi");

            //Toplam sütunu ekleme
            gvCikisEmri.AddSummary("Qty");
            gvCELines.AddSummary("Qty", "Eksik", "Fazla");
            gvCELines2.AddSummary("Qty");

            

            GridManager gm = GridManager.GetManager(gvCikisEmri);
            if (ytk(88))
            {
                gm.GridMenu.AddMenu("DU4 Toplarını Panoya Al", DU4ToplariniPanoyaAl);
                gm.GridMenu.AddMenu("Topların Yerini Göster", ToplarinYeriniGoster);
                gm.GridMenu.AddMenu("Çeki Listesi", PrintCeki);
                gm.GridMenu.AddMenu("Top Bölme Emri Yazdır", PrintRollCut);
                gm.GridMenu.AddMenu("İrsaliye Yazdır", PrintShip);
                gm.GridMenu.AddMenu("Muadil Etiketleri Yazdır", PrintMuadil);
                gm.GridMenu.AddMenu("Satış çıkışı için etiket yazdır", PrintSatisEtiket);
                gm.GridMenu.AddMenu("Destex etiketi yazdır", PrintDestexEtiket);
                gm.GridMenu.AddMenu("Kapat", Kapat, true);
                gm.GridMenu.AddMenu("İptal Et", IptalEt);
            }
            gm.GridMenu.AddMenu("Ortak Kumaş Yazdır", PrintOrtakKumas);

            GridManager gm1 = GridManager.GetManager(gvCELines);
            GridManager gm2 = GridManager.GetManager(gvCELines2);
            if (ytk(88))
            {
                gm1.GridMenu.AddMenu("İptal Et", IptalEtCELines);
                gm2.GridMenu.AddMenu("İptal Et", IptalEtCELines2);
            }


            if (ytk(90))
            {
                gvCikisEmri.MakeReadOnly("AtelyeId", "CustomerId", "VendorId");
                //bbiSave.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
                bbiSave.Enabled = true;
            }
            else
            {
                gvCikisEmri.MakeReadOnly();
                //bbiSave.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
                bbiSave.Enabled = false;
            }
            gvCELines.OptionsBehavior.Editable = gvCELines2.OptionsBehavior.Editable = false;
            gvCikisEmri.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(gvCikisEmirleri_FocusedRowChanged);
            gvCikisEmri.RowStyle += new DevExpress.XtraGrid.Views.Grid.RowStyleEventHandler(gvCikisEmirleri_RowStyle);

            this.Text = "Çıkış Emirleri";

            //gvCikisEmri.OptionsBehavior.Editable = false;

            splitContainerControl1.AutoSize();
            splitContainerControl2.AutoSize();
            bsCELines.CurrentChanged += new EventHandler(bsCikisEmriLines_CurrentChanged);



            btnGetir.Click += new EventHandler(btnGetir_Click);
            btnTemizle.Click += new EventHandler(btnTemizle_Click);

            CreateVerticalGrid();

            //gvCikisEmri.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect;

            gvCikisEmri.BestFitColumns();
            gvCELines.BestFitColumns();
            gvCELines2.BestFitColumns();

        }

        private void PrintDestexEtiket(object sender, EventArgs e)
        {
            if (gvCikisEmri.FocusedRowHandle > -1)
            {
                int CikisEmriId = gvCikisEmri.GetFocusedRowCellValue("CikisEmriId").ToInt();
                Test.DestexEtiket de = new Test.DestexEtiket(CikisEmriId);
                de.ShowPreview();
            }
        }

        private void PrintSatisEtiket(object sender, EventArgs e)
        {
            if (gvCikisEmri.FocusedRowHandle > -1)
            {
                int CikisEmriId = gvCikisEmri.GetFocusedRowCellValue("CikisEmriId").ToInt();
                Rapor.SatisEtiket se = new SatisEtiket(CikisEmriId);
                se.ShowPreview();
            }
        }

        private void PrintCeki(object sender, EventArgs e)
        {
            string CikisEmriIds = string.Empty;
            CikisEmriIds = GetCikisEmriId(CikisEmriIds);

            DataRow[] dr = gvCikisEmri.DataTable().Select("CikisEmriId in (" + CikisEmriIds + ")");
            int ilkAtelyeId = dr[0]["AtelyeId"].ToInt();
            int sameWithFirstCount = dr.CopyToDataTable().Select("AtelyeId=" + ilkAtelyeId.ToString()).Length;

            if (dr.Length > 1 && dr.Length > sameWithFirstCount)
            {
                ShowErrorMessage("Seçtiğiniz satırlarda farklı atölye bilgileri var. Lütfen kontrol ediniz !");
                return;
            }

            DataRow[] drSatis = gvCikisEmri.DataTable().Select("CikisEmriId in (" + CikisEmriIds + ") and CikisTipiId = 31");
            if (drSatis.Length > 0)
            {
                ShowErrorMessage("DEPO İÇİ SATIŞ tipindeki çıkışlar yalnızca irsaliye kesmek içindir. Çeki listesi alınamaz !");
                return;
            }

            //Rapor.IrsaliyeTopDetay RollCut = new Rapor.IrsaliyeTopDetay(CikisEmriIds, 1, "GetCikisEmri");
            Rapor.xrIrsaliye RollCut = new Rapor.xrIrsaliye(CikisEmriIds, 1, "GetCikisEmri");
            RollCut.ShowPrintMarginsWarning = false;
            RollCut.PrintingSystem.EndPrint += new EventHandler(PrintingSystem_EndPrint);
            RollCut.ShowPreview();
        }

        void bsCikisEmriLines_CurrentChanged(object sender, EventArgs e)
        {
            gvCELines2.BestFitColumns();
        }

        private void gvCikisEmirleri_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            if (bsCE != null && bsCE.Current != null)
            {
                int stGenelId = ((DataRowView)bsCE.Current).Row["stGenelId"].ToInt();
                if (ytk(93) && stGenelId == 1)
                    gvCikisEmri.MakeReadOnly("AtelyeId", "CustomerId", "VendorId" /*, "Çeki"*/);
                else
                    gvCikisEmri.MakeReadOnly();

                bsiHeader.Caption = ((DataRowView)bsCE.Current).Row["CikisEmriId"].ToString();
                //txtInfo.Caption = "Çıkış Emri - " + ((DataRowView)bsCE.Current).Row["CikisEmriId"].ToString();
                gvCELines.BestFitColumns();
            }
        }

        private string GetCikisEmriId(string idxs)
        {
            foreach (int rowHandle in gvCikisEmri.GetSelectedRows())
                if (rowHandle > -1)
                    idxs += gvCikisEmri.GetRowCellValue(rowHandle, "CikisEmriId").ToString() + ",";

            if (idxs.Substring(idxs.Length - 1, 1) == ",")
                idxs = idxs.Substring(0, idxs.Length - 1);
            return idxs;
        }

        void PrintOrtakKumas(object sender, EventArgs e)
        {
            int cikisEmriId = intParse(gvCikisEmri.GetRowCellValue(gvCikisEmri.FocusedRowHandle, "CikisEmriId"));
            Rapor.xrIrsaliyeOrtak ortak = new Rapor.xrIrsaliyeOrtak(cikisEmriId);
            ortak.PrinterName = "Xerox Plaser 6180n Pcl6";
            ortak.ShowPreview();
        }

        void PrintMuadil(object sender, EventArgs e)
        {
            string RollIds = "";
            int cikisEmriId = intParse(gvCikisEmri.GetRowCellValue(gvCikisEmri.FocusedRowHandle, "CikisEmriId"));
            DataRow[] dr = ((DataSet)bsCE.DataSource).Tables[2].Select("CikisEmriId=" + cikisEmriId.ToString() + " and ProductId<>AlternatifId and AlternatifId is not null and ISNULL(ShelfId,2) <>1");
            foreach (DataRow dreach in dr)
            {
                RollIds += dreach["RollId"].ToString() + ",";
            }
            if (RollIds.Length > 0)
            {
                RollIds = RollIds.Substring(0, RollIds.Length - 1);
                TopEtiketleri2 muadilEtiket = new TopEtiketleri2(EtiketTipi.RollId, RollIds);
                muadilEtiket.ShowDialog();
            }
            else
                ShowInfoMessage("Seçtiğiniz çıkış emrinde muadil top bulunmamaktadır ");
        }

        void PrintShip(object sender, EventArgs e)
        {
            string CikisEmriIds = string.Empty;
            CikisEmriIds = GetCikisEmriId(CikisEmriIds);

            DataRow[] dr = gvCikisEmri.DataTable().Select("CikisEmriId in (" + CikisEmriIds + ")");

            int ilkCikisTipi = dr[0]["CikisTipiId"].ToInt();
            int sameWithCikisTipi = dr.CopyToDataTable().Select("CikisTipiId=" + ilkCikisTipi.ToString()).Length;
            if (dr.Length > 1 && dr.Length > sameWithCikisTipi)
            {
                ShowErrorMessage("Seçtiğiniz satırlarda farklı çıkış tipleri var. Lütfen kontrol ediniz !");
                return;
            }

            int ilkAtelyeId = dr[0]["AtelyeId"].ToInt();
            int sameWithFirstCount = dr.CopyToDataTable().Select("AtelyeId=" + ilkAtelyeId.ToString()).Length;

            int ilkMusteriId = dr[0]["CustomerId"].ToInt();
            int sameWithFirstCountMusteri = dr.CopyToDataTable().Select("CustomerId=" + ilkMusteriId.ToString()).Length;

            int ilkUreticiId = dr[0]["VendorId"].ToInt();
            int sameWithFirstCountUretici = dr.CopyToDataTable().Select("VendorId=" + ilkUreticiId.ToString()).Length;

            if (dr.Length > 1 && dr.Length > sameWithFirstCount && ilkAtelyeId > 0)
            {
                ShowErrorMessage("Seçtiğiniz satırlarda farklı atölye bilgileri var. Lütfen kontrol ediniz !");
                return;
            }
            else if (dr.Length > 1 && dr.Length > sameWithFirstCountMusteri && ilkMusteriId > 0)
            {
                ShowErrorMessage("Seçtiğiniz satırlarda farklı müşteri bilgileri var. Lütfen kontrol ediniz !");
                return;
            }
            else if (dr.Length > 1 && dr.Length > sameWithFirstCountUretici && ilkUreticiId > 0)
            {
                ShowErrorMessage("Seçtiğiniz satırlarda farklı üretici bilgileri var. Lütfen kontrol ediniz !");
                return;
            }

            char CikisTipi = 'C';
            if (ilkCikisTipi == 31)
                CikisTipi = 'S';

            using (KumasIrsaliyeOlustur ki = new KumasIrsaliyeOlustur(CikisEmriIds, CikisTipi))
            {
                DialogResult drKumas = ki.ShowDialog();
                if (drKumas == DialogResult.OK)
                    Yenile();
            }
        }

        void PrintRollCut(object sender, EventArgs e)
        {
            int RollCut = gvCikisEmri.GetFocusedRowCellValue("ToCut").ToInt();
            if (RollCut == 0)
            {
                ShowErrorMessage("Seçtiğiniz çıkış emrinde bölünecek top yok !");
                return;
            }

            int CikisTipi = gvCikisEmri.GetFocusedRowCellValue("CikisTipiId").ToInt();
            if (CikisTipi == 31)
            {
                ShowErrorMessage("Depo içi satış çıkışlarında top bölme yapmayınız !");
                return;
            }

            int CikisEmriId = gvCikisEmri.GetFocusedRowCellValue("CikisEmriId").ToInt();
            xrTopKesim tk = new xrTopKesim(CikisEmriId);
            tk.ShowPreview();

            string RollIds = ExecuteScalar("GetBarcodeByCikisEmriId", CikisEmriId).ToString();
            TopEtiketleri2 muadilEtiket = new TopEtiketleri2(EtiketTipi.YeniTopBol, RollIds);
            muadilEtiket.Show();
        }

        void PrintingSystem_EndPrint(object sender, EventArgs e)
        {
            string CikisEmriIds = string.Empty;
            CikisEmriIds = GetCikisEmriId(CikisEmriIds);
            ExecuteNonQuery("UpdIsCekiPrinted", CikisEmriIds);
            Yenile();
        }

        void gvCikisEmirleri_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
        {
            int currentStGenelId = intParse(gvCikisEmri.GetRowCellValue(e.RowHandle, "stGenelId"));

            if (currentStGenelId != 0)
            {
                if (currentStGenelId == 3)
                {
                    e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Strikeout);
                    e.Appearance.ForeColor = Color.Gray;
                }
                else if (currentStGenelId == 2)
                {
                    e.Appearance.ForeColor = Color.Gray;
                }
                else if (boolParse(gvCikisEmri.GetRowCellValue(e.RowHandle, "ToCut")))
                {
                    e.Appearance.ForeColor = Color.OrangeRed;
                }
            }
        }

        void Kapat(object sender, EventArgs e)
        {
            if (CikisEmriId != -1)
            {
                if (XtraMessageBox.Show("Seçtiğiniz çıkış emrinde çıkılmayan toplar var. Yine de çıkış emrini kapatmak ister misiniz ?", "Critical", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                {
                    ExecuteNonQuery("CloseCikisEmri", CikisEmriId, WhoAmI);
                    Yenile();
                }
            }
            else
            {
                ShowInfoMessage("Lütfen önce çıkış emri satırı seçiniz.");
            }
        }

        void IptalEt(object sender, EventArgs e)
        {
            int stGenelId = Convert.ToInt32(gvCikisEmri.GetFocusedRowCellValue("stGenelId"));
            if (stGenelId == 2)
            {
                ShowInfoMessage("Kapatılmış olan çıkış emrini iptal edemezsiniz !");
                return;
            }
            if (CikisEmriId != -1)
            {
                String BolunenRollIdler = "",
                       BolunmusRollIdler = "";
                
                DataTable CikisiYapilanToplar = ExecuteDataTable("GetCikisiYapilanToplar", CikisEmriId, null, null);
                if (CikisiYapilanToplar.Rows.Count > 0)
                    XtraMessageBox.Show("Roll ID: " + GetCikisiYapilanToplar(CikisiYapilanToplar) + "\nOlan Top(lar) İçin Çıkış İşlemi Zaten Yapılmış.\nBu Top(lar) Hariç Bırakılarak İptal İşlemine Devam Edilecek.", "Bilgi");
                
                DataTable BolunenToplar = ExecuteDataTable("GetBolunenTopForCikisEmriIptal", CikisEmriId, null, null);
                if (BolunenToplar.Rows.Count > 0)
                {
                    using (Cikis.TopBolmeIptal bolmeIptal = new Cikis.TopBolmeIptal(CikisEmriId, null, null))
                        if (bolmeIptal.ShowDialog() == DialogResult.OK)
                        {
                            BolunenRollIdler = bolmeIptal.GetBolunenRollIdler();
                            BolunmusRollIdler = bolmeIptal.GetBolunmusRollIdler();

                            ExecuteNonQuery("CancelCikisEmri", CikisEmriId, bolmeIptal.GetEditValue(), WhoAmI, BolunenRollIdler, BolunmusRollIdler);
                            Yenile();
                        }
                }
                else
                {
                    using (CikisEmriIptal cikisIptal = new CikisEmriIptal())
                        if (cikisIptal.ShowDialog() == DialogResult.OK)
                        {
                            //if (!BolunenRollIdler.Equals(String.Empty))
                            //    ExecuteNonQuery("ExecuteCancelTopBolme", BolunenRollIdler);

                            ExecuteNonQuery("CancelCikisEmri", CikisEmriId, cikisIptal.Notes, WhoAmI, BolunenRollIdler, BolunmusRollIdler);
                            Yenile();
                        }
                }
            }
            else
            {
                ShowInfoMessage("Lütfen önce çıkış emri satırı seçiniz.");
            }
        }

        public String GetCikisiYapilanToplar(DataTable CikisiYapilanToplar)
        {
            String CikisiYapilanToplarListesi = "";
            int k = 0;
            for (int i = 0; i < CikisiYapilanToplar.Rows.Count; ++i)
            {
                if (k == 0)
                    CikisiYapilanToplarListesi = CikisiYapilanToplar.Rows[i]["RollId"].ToStr();
                else
                    CikisiYapilanToplarListesi += ", " + CikisiYapilanToplar.Rows[i]["RollId"].ToStr();
                ++k;
            }

            return CikisiYapilanToplarListesi;
        }

        void IptalEtCELines(object sender, EventArgs e)
        {
            String SelectedProductIds = gvCELines.GetSelectedValues("ProductId");
            int stGenelId = Convert.ToInt32(gvCikisEmri.GetFocusedRowCellValue("stGenelId"));
            if (stGenelId == 2)
            {
                ShowInfoMessage("Kapatılmış olan çıkış emrini iptal edemezsiniz !");
                return;
            }
            if (CikisEmriId != -1)
            {
                String BolunenRollIdler = "",
                       BolunmusRollIdler = "";

                DataTable CikisiYapilanToplar = ExecuteDataTable("GetCikisiYapilanToplar", CikisEmriId, SelectedProductIds, null);
                if (CikisiYapilanToplar.Rows.Count > 0)
                    XtraMessageBox.Show("Roll ID: " + GetCikisiYapilanToplar(CikisiYapilanToplar) + "\nOlan Top(lar) İçin Çıkış İşlemi Zaten Yapılmış.\nBu Top(lar) Hariç Bırakılarak İptal İşlemine Devam Edilecek.", "Bilgi");

                int CikisEmriSilinecek = ExecuteScalar("GetCikisEmriSilinecek2", CikisEmriId, GetRollIdsForSelectedProducts(SelectedProductIds, CikisEmriId)).ToInt();
                DataTable BolunenToplar = ExecuteDataTable("GetBolunenTopForCikisEmriIptal", CikisEmriId, SelectedProductIds, null);
                if (BolunenToplar.Rows.Count > 0)
                {
                    using (Cikis.TopBolmeIptal bolmeIptal = new Cikis.TopBolmeIptal(CikisEmriId, SelectedProductIds, null))
                        if (bolmeIptal.ShowDialog() == DialogResult.OK)
                        {
                            BolunenRollIdler = bolmeIptal.GetBolunenRollIdler();
                            BolunmusRollIdler = bolmeIptal.GetBolunmusRollIdler();

                            ExecuteNonQuery("CancelCikisEmriArtikelBazli", CikisEmriId, bolmeIptal.GetEditValue(), WhoAmI, BolunenRollIdler, BolunmusRollIdler, SelectedProductIds, CikisEmriSilinecek);
                            Yenile();
                        }
                }
                else
                {
                    using (CikisEmriIptal cikisIptal = new CikisEmriIptal())
                        if (cikisIptal.ShowDialog() == DialogResult.OK)
                        {
                            ExecuteNonQuery("CancelCikisEmriArtikelBazli", CikisEmriId, cikisIptal.Notes, WhoAmI, BolunenRollIdler, BolunmusRollIdler, SelectedProductIds, CikisEmriSilinecek);
                            Yenile();
                        }
                }
            }
            else
            {
                ShowInfoMessage("Lütfen önce çıkış emri satırı seçiniz.");
            }
        }

        public String GetRollIdsForSelectedProducts(String SelectedProductIds, int CikisEmriId)
        {
            String RollIdListesi = "";
            List<int> ListRollIds = new List<int>();

            string[] ProductIds = SelectedProductIds.Split(new Char[] { ',' });

            for (int i = 0; i < ProductIds.Length; ++i )
            {
                for(int j = 0; j < gvCELines2.DataTable().Rows.Count; ++j)
                {
                    if (gvCELines2.DataTable().Rows[j]["CikisEmriId"].ToInt() == CikisEmriId && gvCELines2.DataTable().Rows[j]["ProductId"].ToInt() == Convert.ToInt32(ProductIds[i]))
                    {
                        if (!ListRollIds.Contains(gvCELines2.DataTable().Rows[j]["RollId"].ToInt()))
                            ListRollIds.Add(gvCELines2.DataTable().Rows[j]["RollId"].ToInt());
                    }
                }
            }

            int k = 0;
            foreach (int element in ListRollIds)
            {
                if (k == 0)
                    RollIdListesi = element.ToStr();
                else
                    RollIdListesi += "," + element.ToStr();

                ++k;
            }

            return RollIdListesi;
        }

        void IptalEtCELines2(object sender, EventArgs e)
        {
            String SelectedRollIds = gvCELines2.GetSelectedValues("RollId");
            int stGenelId = Convert.ToInt32(gvCikisEmri.GetFocusedRowCellValue("stGenelId"));
            if (stGenelId == 2)
            {
                ShowInfoMessage("Kapatılmış olan çıkış emrini iptal edemezsiniz !");
                return;
            }
            if (CikisEmriId != -1)
            {
                String BolunenRollIdler = "",
                       BolunmusRollIdler = "";
                //DataTable ces = ExecuteDataTable("GetCikisEmriSilinecek", CikisEmriId, SelectedRollIds);
                //int CikisEmriSilinecek = ces.Rows[0]["Result"].ToInt();

                DataTable CikisiYapilanToplar = ExecuteDataTable("GetCikisiYapilanToplar", CikisEmriId, null, SelectedRollIds);
                if (CikisiYapilanToplar.Rows.Count > 0)
                    XtraMessageBox.Show("Roll ID: " + GetCikisiYapilanToplar(CikisiYapilanToplar) + "\nOlan Top(lar) İçin Çıkış İşlemi Zaten Yapılmış.\nBu Top(lar) Hariç Bırakılarak İptal İşlemine Devam Edilecek.", "Bilgi");
                
                int CikisEmriSilinecek = ExecuteScalar("GetCikisEmriSilinecek2", CikisEmriId, SelectedRollIds).ToInt();
                DataTable BolunenToplar = ExecuteDataTable("GetBolunenTopForCikisEmriIptal", CikisEmriId, null, SelectedRollIds);
                if (BolunenToplar.Rows.Count > 0)
                {
                    using (Cikis.TopBolmeIptal bolmeIptal = new Cikis.TopBolmeIptal(CikisEmriId, null, SelectedRollIds))
                        if (bolmeIptal.ShowDialog() == DialogResult.OK)
                        {
                            BolunenRollIdler = bolmeIptal.GetBolunenRollIdler();
                            BolunmusRollIdler = bolmeIptal.GetBolunmusRollIdler();

                            ExecuteNonQuery("CancelCikisEmriTopBazli", CikisEmriId, bolmeIptal.GetEditValue(), WhoAmI, BolunenRollIdler, BolunmusRollIdler, SelectedRollIds, CikisEmriSilinecek);
                            Yenile();
                        }
                }
                else
                {
                    using (CikisEmriIptal cikisIptal = new CikisEmriIptal())
                        if (cikisIptal.ShowDialog() == DialogResult.OK)
                        {
                            ExecuteNonQuery("CancelCikisEmriTopBazli", CikisEmriId, cikisIptal.Notes, WhoAmI, BolunenRollIdler, BolunmusRollIdler, SelectedRollIds, CikisEmriSilinecek);
                            Yenile();
                        }
                }
            }
            else
            {
                ShowInfoMessage("Lütfen önce çıkış emri satırı seçiniz.");
            }
        }

        private void DU4ToplariniPanoyaAl(object sender, EventArgs e)
        {
            if (CikisEmriId != -1)
            {

                DataTable dt = new DataTable("DU4");
                dt.Columns.Add("RollId", typeof(int));
                dt = ExecuteDataTable("GetDU4Toplari", CikisEmriId);

                string lst = string.Empty;
                foreach (DataRow dr in dt.Rows)
                    lst += dr["RollId"].ToString() + ",";

                if (lst != string.Empty)
                    Clipboard.SetText(lst.Substring(0, lst.Length - 1));
            }
        }

        private void ToplarinYeriniGoster(object sender, EventArgs e)
        {
            if (CikisEmriId != -1)
            {
                using (ToplarinYeri toplarinYeri = new ToplarinYeri(CikisEmriId))
                    toplarinYeri.ShowDialog();
            }
            else
            {
                ShowInfoMessage("Lütfen önce çıkış emri satırı seçiniz.");
            }
        }

        private void CreateVerticalGrid()
        {
            DataTable dt = AppSession.Lookups.HareketTipi.Select("Category = 'ÇIKIŞ'").CopyToDataTable();    //HareketTipiId in (10,11,13,14,15,31)
            RepositoryItemGridLookUpEdit riCikisTipi = GetCustomGLE(dt, "Name", "HareketTipiId");

            vgc.Rows.AddRange(new BaseRow[] {
                AddItem("Durum", typeof(string), riGenel),
                AddItem("CikisTipiId", typeof(int), riCikisTipi),
                AddItem("CikisEmriId", typeof(int)),
                AddItem("AtelyeId", typeof(int), RI(Rp.Atelye)),
                AddItem("CustomerId", typeof(int), RI(Rp.V_Customer)),
                AddItem("VendorId", typeof(int), RI(Rp.Vendor)),
                AddItem("OrderRef", typeof(string)),
                AddItem("BrandId", typeof(int), RI(Rp.Brand)),
                AddItem("SezonId", typeof(int), RI(Rp.Sezon)),
                AddItem("CikisPartisiId", typeof(int)),
                AddItem("OlusturulmaTarihi", typeof(DateTime), new RepositoryItemDateEdit()),
                AddItem("OlusturanId", typeof(int), RI(Rp.V_User)),
                AddItem("CikisTarihi", typeof(DateTime), new RepositoryItemDateEdit()),
                AddItem("Notes", typeof(string), new RepositoryItemMemoEdit()),
                AddItem("isCekiPrinted", typeof(bool)),
                AddItem("AG", typeof(string)),
                AddItem("DosyaNo", typeof(string)),
                AddItem("KumasId", typeof(int), RI(Rp.V_Kumas)),
                AddItem("TelaId", typeof(int), RI(Rp.Tela)),
                AddItem("RollId", typeof(int)),
                AddItem("stCikisId", typeof(int), RI(Rp.stCikis))
            });

            vgc.Rows.GetRowByFieldName("Notes", true).Height = 60;
            //, GetCustomRI("AG", true, "A", "G", "Tümü")

            vgc.OptionsBehavior.UseEnterAsTab = true;
            vgc.LayoutStyle = DevExpress.XtraVerticalGrid.LayoutViewStyle.SingleRecordView;
            vgc.CustomDrawRowHeaderCell += new CustomDrawRowHeaderCellEventHandler(vgc_CustomDrawRowHeaderCell);
            vgc.Appearance.RowHeaderPanel.BackColor = Color.LightBlue;

            //            vgc.RecordWidth = splitContainerControl2.Panel1.Width - vgc.RowHeaderWidth - 3;

            vgc.SetCellValue(vgc.Rows["Durum"], 0, "AÇIK");
            vgc.FocusedRow = vgc.Rows["CikisEmriId"];
            vgc.BestFit();
        }

        public BaseRow AddItem(string name, Type t, params RepositoryItem[] ri)
        {
            return AddItem(vgc, name, t, ri);
        }

        object GetVal(string FieldName)
        {
            return vgc.GetCellValue(vgc.Rows[FieldName], vgc.FocusedRecord);
        }

        void btnGetir_Click(object sender, EventArgs e)
        {
            Yenile();
        }

        private void Yenile()
        {
            gvCikisEmri.RefreshDataSource(true, "GetCikisEmriFiltered",
                strParse(GetVal("Durum")),
                intParse(GetVal("CikisTipiId")),
                intParse(GetVal("CikisEmriId")),
                intParse(GetVal("AtelyeId")),
                intParse(GetVal("CustomerId")),
                intParse(GetVal("VendorId")),
                strParse(GetVal("OrderRef")),
                intParse(GetVal("BrandId")),
                intParse(GetVal("SezonId")),
                intParse(GetVal("CikisPartisiId")),
                datetimeParse(GetVal("OlusturulmaTarihi")),
                intParse(GetVal("OlusturanId")),
                datetimeParse(GetVal("CikisTarihi")),
                strParse(GetVal("Notes")),
                boolParse(GetVal("isCekiPrinted")),
                strParse(GetVal("AG")),
                strParse(GetVal("DosyaNo")),
                intParse(GetVal("KumasId")),
                intParse(GetVal("TelaId")),
                intParse(GetVal("RollId")),
                intParse(GetVal("stCikisId"))
                );

            gvCELines.FocusedRowHandle = gvCELines.LocateByDisplayText(0, gvCELines.Columns["Hit"], "1");
            gvCELines2.FocusedRowHandle = gvCELines2.LocateByDisplayText(0, gvCELines2.Columns["Hit"], "1");

            gvCikisEmri.BestFitColumns();
            gvCELines.BestFitColumns();
            gvCELines2.BestFitColumns();

            Notify("Done.");
        }

        void btnTemizle_Click(object sender, EventArgs e)
        {
            foreach (BaseRow r in vgc.Rows)
                vgc.SetCellValue(r, 0, null);
        }


        private void bbiSave_ItemClick_1(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            gvCikisEmri.CloseEditor();
            gvCikisEmri.UpdateCurrentRow();
            DataRow[] dr = gvCikisEmri.DataTable().Select("(AtelyeId is not null and CustomerId is not null) or (AtelyeId is not null and VendorId is not null) or (VendorId is not null and CustomerId is not null)");
            if (dr.Length > 0)
            {
                string HataliCikisEmirleri = "";
                foreach (DataRow drItem in dr)
                {
                    HataliCikisEmirleri += drItem["CikisEmriId"].ToString() + ",";
                }
                HataliCikisEmirleri = HataliCikisEmirleri.RemoveIfEndsWith(",");
                ShowErrorMessage(HataliCikisEmirleri + " nolu Çıkış emir(ler)inde atölye , müşteri veya üretici seçeneklerinden ikisi birden seçilmiş. Lütfen kontrol ediniz!");
                return;
            }
            gvCikisEmri.Update("CikisEmriId,AtelyeId,CustomerId,VendorId", "CikisEmri");
            Yenile();
        }

        private void CikisEmirleri_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.R)
            {
                this.Cursor = Cursors.WaitCursor;
                Yenile();
                this.Cursor = Cursors.Default;
            }
               
 
        }


    }
}
